package finalize;

public class FinalizeTest {
	
	/**
	 * 垃圾回收，大部分情况下按照new出来的倒序执行，但不尽然，jvm决定先回收哪个。
	 * @param args
	 * @throws Exception
	 */
    public static void main(String[] args) throws Exception {
    	B b = new B("allen", 20);
        A a = new A(b);
        a = null;
        System.gc();//只回收a，不回收b
        System.out.println("----------1-----------");
        
        Thread.sleep(1000);
        System.out.println(C.a.b);   
        
        A a2 = new A(new B("jackson",10000));
        a2 = null;
        System.gc();//回收a,b
        System.out.println("----------2-----------");
        
        Thread.sleep(1000);
        System.out.println(C.a.b);   
        
        C.a.b = null;
        System.gc();//不回收，因为没有new出任何东西，C中的a是静态的
    }

}
